package models

import (
	"time"
)

// UrlMap 这个是表结构：
//
//	字段分别是id，长链，短链，是否是用户自定义的短链，创建时间，过期时间
type UrlMap struct {
	ID          int64     `gorm:"primary_key;column:id"`
	LongUrl     string    `json:"long_url" gorm:"not null;column:long_url"`
	ShortUrl    string    `json:"short_url" gorm:"not null;unique;column:short_url"`
	UserDefined bool      `json:"user_defined" gorm:"column:user_defined"`
	CreatedAt   time.Time `gorm:"column:created_at"`
	ExpiresAt   time.Time `json:"expires_at" gorm:"column:expires_at"`
}

func (U *UrlMap) TableName() string {
	return "url_map"
}

func (u *UrlMap) GetNowTime() {
	u.CreatedAt = time.Now()
}

// UrlRequest todo 还需要涉及json数据的序列化和反序列化，其实使用一个匿名结构体就行
// 字段含义 ：长链，用户自定义，有效时间
type UrlRequest struct {
	LongUrl    string `json:"long_url" validate:"required,url"`
	CustomCode string `json:"custom_code,omitempty" validate:"omitempty,min=4,max=10,alphanum" label:"用户定义后缀"`
	UsedTime   *int   `json:"used_time,omitempty" validate:"omitempty,min=1,max=10" label:"有效时间"`
}

// 为什么是 *int 原因是这个有效时间我们要知道是传入的0还是nil

// UrlResponse todo 这个就是一个响应
//
//	字段含义：返回短链和过期时间
type UrlResponse struct {
	ShortUrl  string    `json:"short_url"`
	ExpiresAt time.Time `json:"expires_at"`
}

// CacheSL todo 还要写一个缓存结构
type CacheSL struct {
	ShortURL  string    `json:"short_url"`
	LongURL   string    `json:"long_url"`
	ExpiredAt time.Time `json:"expires_at" gorm:"column:expires_at"`
}
